// 渲染器
import { createAppAPI } from './apiCreateApp'
// 创建渲染器方法
export function createRenderer (options) {
    // 组件渲染动作
    function render (vnode, container) {
        // 旧的虚拟节点
        const prevVNode = container._vnode
        // 如果新节点不存在 则直接销毁卸载旧的节点
        if(!prevVNode) {
            // TODO: 卸载旧的节点
        } else {
            // 存在新的虚拟节点 则 执行patch 对比更新新的组件
            patch(container._vnode || null, vnode, container)
        }
        // patch 执行完成之后将新的虚拟节点缓存作为下一次的旧节点
        container._vnode = vnode
    }
    return {
        // 创建vue组件api，并在其中调用渲染
        createApp: createAppAPI(render)
    }
}


/**
 * @description 新旧虚拟节点 patch 算法
 * @param {*} oldNode 
 * @param {*} newNode 
 * @param {*} container 
 */
function patch (oldNode, newNode, container) {
  // TODO: patch 算法先留着
}